package projeto.dao;

import java.util.List;

import projeto.model.Produto;

/**
 * Contrato de persistência para a entidade <code>Mercadoria</code>. 
 * 
 * <p>Define as operações basicas de cadastro (CRUD), seguindo o design pattern <code>Data Access Object</code>.</p>
 * 
 * @author YaW Tecnologia
 */
public interface IProdutoDAO {

	/**
	 * Faz a inserção ou atualização da mercadoria na base de dados.
	 * @param produto
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	void salvar(Produto produto);
	
	/**
	 * Exclui o registro da mercadoria na base de dados.
	 * @param mercadoria
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	void apagar(Produto produto);
	
	/**
	 * @return Lista com todas as mercadorias cadastradas no banco de dados.
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	List<Produto> listaTodos();
	
	/**
	 * @param nome Filtro da pesquisa utilizando like.
	 * @return Lista de mercadorias com filtro em nome.
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	List<Produto> listaProdutoPorNome(String nome);
	
	/**
	 * @param id filtro da pesquisa.
	 * @return Mercadoria com filtro no id, caso não exista retorna <code>null</code>.
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	Produto buscaPorId(Integer id);

	/**
	 * Inicializa o componente de persistência.
	 * @throws <code>PersistenceException</code> se algum problema ocorrer.
	 */
	void init();
}
